#ifndef _IMAGEN_GTK_H_
#define _IMAGEN_GTK_H_

#include <iostream>
#include <string>
#include <cairo/cairo.h>
#include <gdkmm-2.4/gdkmm.h>
#include "../Modelo/Imagen.h"

using namespace std;

class ImagenGtkmm : public Imagen
{
public:
    ImagenGtkmm() { };
    ImagenGtkmm(int x, int y, Cairo::RefPtr<Cairo::Context> context,  Cairo::RefPtr<Cairo::ImageSurface> surface,
    Glib::RefPtr<Gdk::Pixbuf> image, string name) : Imagen(x,y,name) {
        image_context_ptr_ = context;
        image_surface_ptr_ = surface;
        image_ptr_ = image;
    };
    ImagenGtkmm(const ImagenGtkmm&);
    ~ImagenGtkmm() { };

    ImagenGtkmm& operator=(const ImagenGtkmm&);

    Cairo::RefPtr< Cairo::Context > GetContexto() const { return image_context_ptr_; };
    Cairo::RefPtr< Cairo::ImageSurface > GetSurface() const { return image_surface_ptr_; };
    Glib::RefPtr< Gdk::Pixbuf > GetImage() const { return image_ptr_; };
    int GetAncho() { return image_surface_ptr_->get_width(); };
    int GetAlto() { return image_surface_ptr_->get_height(); };

    void SetContexto(Cairo::RefPtr< Cairo::Context > context) { image_context_ptr_ = context; };
    void SetSurface(Cairo::RefPtr< Cairo::ImageSurface > surface) { image_surface_ptr_ = surface; };
    void SetImage(Glib::RefPtr< Gdk::Pixbuf > image) { image_ptr_ = image; };

    void Dibujar();
    void Redimensionar(bool, bool, bool);

private:
    Cairo::RefPtr< Cairo::Context > image_context_ptr_;
    Cairo::RefPtr< Cairo::ImageSurface > image_surface_ptr_;
    Glib::RefPtr< Gdk::Pixbuf > image_ptr_;

};

#endif